package com.topdt.jbpm.dao;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.hibernate.SQLQuery;
import org.springframework.stereotype.Repository;

import com.thx.common.orm.PaginationDao;
import com.thx.common.util.AppContext;
import com.topdt.jbpm.model.AppType;

/**
 *
 * 建立日期 : 2013-6-19 上午11:44:37<br>
 * 作者 : shiyan<br>
 * 模块 : <br>
 * 描述 : <br>
 * 修改历史: 序号 日期 修改人 修改原因 <br>
 * 1 <br>
 * 2 <br>
 */
@Repository
public class AppTypeDao extends PaginationDao<AppType>{

	public List<AppType> getAllByCompanyId(){
		String comId = AppContext.getCurrentComId();
		String hql = "from AppType at where at.companyId=? order by at.typeId ";
		return findPageList(hql, new Object[]{comId});
	}

	public List<AppType> getAllByComId(){
		String comId = AppContext.getCurrentComId();
		String hql = "from AppType at where at.companyId=? order by at.typeId ";
		List<AppType> appTypes = this.createQuery(hql, new Object[]{comId}).list();
		return appTypes;
	}
	public List<AppType> getAllFillSelect(){
		String comId = AppContext.getCurrentComId();
		String hql = "from AppType at where at.companyId=? order by at.typeId ";
		List<AppType>  list= createQuery(hql,new Object[]{comId}).list();
		if (list.size() > 0)
			return list;

		return null;
	}
	public List<AppType> findByName(String typeName) {
		String comId = AppContext.getCurrentComId();
		String hql = "from AppType at where at.companyId = ? and at.typeName = ?";
		return createQuery(hql, new Object[]{comId, typeName}).list();
	}
	/**
	 * lilei
	 * 按appTypeNames查询
	 * 2016-8-29
	 */
	public List<AppType> findByAppTypeNames(String appTypeNames){
		appTypeNames = appTypeNames.trim();
		String[] names = appTypeNames.split(",");
		List<AppType> list = new ArrayList<AppType>();
		String comId = AppContext.getCurrentComId();
		String sql = "SELECT * FROM wf_app_type a where a.company_id = "+comId+" and a.type_name IN ('"+getName(names)+"') order by a.type_id";
		return list = createSqlQuery(sql).addEntity(AppType.class).list();
	}

	private String getName(String[] names){
		StringBuilder sb = new StringBuilder();
		for(int i = 0;i<names.length;i++){
			if(StringUtils.isNotBlank(names[i])){
				sb.append(names[i]+"','");
				if(i == names.length-1){
					sb.append(names[i]);
				}
			}
		}
		return sb.toString();
	}

	/**
	 * 获取appType模板数据并插入表里
	 * @param companyId
	 */
	public void addAppType(String companyId) {
		SQLQuery sql = (SQLQuery) getSession().createSQLQuery("insert into wf_app_type wat (wat.TYPE_ID,wat.TYPE_NAME,wat.TYPE_CODE,wat.COMPANY_ID) " +
				" select :companyId||swat.TYPE_ID,swat.TYPE_NAME,swat.TYPE_CODE,:companyId" +
				" from sys_wf_app_type swat").setString("companyId", companyId);
		sql.executeUpdate();
	}

	/**
	 * 获取公文模板数据并插入表里
	 * @author 武海峰
	 * @date   2013-8-30 上午10:45:43
	 * @param companyId
	 */
	public void addArcTempFile(String companyId){
		SQLQuery sql = (SQLQuery) getSession().createSQLQuery("insert into arc_template_file atf (atf.TEMPLATEID,atf.RECORDID,atf.FILENAME,atf.FILETYPE,atf.FILESIZE,atf.FILEDATE,atf.FILEBODY,atf.FILEPATH,atf.USERNAME,atf.DESCRIPT,atf.ENTERPRISE_ID) " +
				" select :companyId||satf.TEMPLATEID,satf.RECORDID,satf.FILENAME,satf.FILETYPE,satf.FILESIZE,satf.FILEDATE,satf.FILEBODY,satf.FILEPATH,satf.USERNAME,satf.DESCRIPT,:companyId" +
				" from sys_arc_template_file satf").setString("companyId", companyId);
		sql.executeUpdate();
	}

	/**
	 * 根据应用id查询应用的类型
	 * @author 刘杰
	 * @date   2015年12月30日 下午5:15:13
	 * @param appId
	 * @return
	 */
	public AppType getAppTypeByAppId(String appId) {
		String sql = "select * from wf_app_type t left join wf_application a on t.type_id=a.app_type_id where a.app_id=?";
		List<AppType> list =  createSqlQuery(sql, appId).addEntity(AppType.class).list();
		if(list!=null&&list.size()>0){
			return list.get(0);
		}
		return null;
	}
}



